//
//  main.m
//  OC04_NSString_NSNumber_NSValue
//
//  Created by Rain on 16/1/28.
//  Copyright © 2016年 Rain. All rights reserved.
//

#import <Foundation/Foundation.h>

/** 知识点: NSString. */
void chapterOfNSString() {

#if 0
    /** NSString: 创建以后, 内容和长度不能改变. */
    
    /** 初始化(init)  */
    NSString *str = [[NSString alloc] initWithString:@"Tom"];
    
    
    /** 便利构造器(string) */
    NSString *str2 = [NSString stringWithString:str];
    NSLog(@"str2:%@", str2);
    
    
    /** 字面量形式. */
    NSString *str3 = @"zhangsan";
    
    /** 创建字符串对象. */
    NSString *strOfCity = [NSString stringWithContentsOfFile:@"/Users/scott/Desktop/city" encoding:NSUTF8StringEncoding error:nil];
    
    NSLog(@"strOfCity:%@", strOfCity);
    
    
    /** 获取字符串长度(length) */
    NSString *str = [NSString stringWithContentsOfFile:@"/Users/scott/Desktop/city" encoding:NSUTF8StringEncoding error:nil];
    
    [str length];
    NSLog(@"%ld", [str length]);
    

 
    
    
    /** 获取字符串中字符(character) */
    
    NSString *str = [NSString stringWithContentsOfFile:@"/Users/scott/Desktop/city" encoding:NSUTF8StringEncoding error:nil];
    
    unichar uni = [str characterAtIndex:5];
    NSLog(@"%c", uni);
    

    
    /** 字符串是否相等(equal) */
    NSString *str = [NSString stringWithContentsOfFile:@"/Users/scott/Desktop/city" encoding:NSUTF8StringEncoding error:nil];
    
    if ([str isEqualToString:@"Tom"]) {
        NSLog(@"用户名存在!");
    } else {
        NSLog(@"用户名不存在!");
    }
    
    
    
    /** 获取子字符串(sub) */
    NSString *str = [NSString stringWithContentsOfFile:@"/Users/scott/Desktop/city" encoding:NSUTF8StringEncoding error:nil];
    
    // 获取"Shengyang"
    
    NSRange range = {3, 3};
    
    NSRange range2 = NSMakeRange(3, 3);

    NSString *sub = [str substringWithRange:range2];
    
    NSLog(@"sub:%@", sub);
    

    
    /** 拼接字符串(append)  */
    NSString *str = @"Tom";
    NSString *str2 = @"zhangsan";
    
    NSString *newStr = [str stringByAppendingString:str2];
    NSLog(@"newStr:%@", newStr);
    
    
    

    /** 替换字符串(replace) */
    
    NSString *str = @"helle";
    // 创建一个range结构体.
    NSRange range = NSMakeRange(4, 1);
    
    NSString *newStr = [str stringByReplacingCharactersInRange:range withString:@"o"];
    
    NSLog(@"newStr:%@", newStr);

    

    /** 字符串对象转化为int类型(int) */
    
    NSString *str = @"10";
    NSString *str2 = @"8";
    
    int a = str.intValue;
    int b = str.intValue;
    NSLog(@"sum:%d", a + b);
    
 
    /** 字符串对象转化为其他数据类型, 例如double, float, BOOL等. */
    
    NSString *str = @"3.1415";
    NSLog(@"%f", str.floatValue);

    
    /** 字符串全部大写(uppercase) */
    NSString *str = @"i have an iphone";
    NSLog(@"%@", str.uppercaseString);
    
    
    /** 字符串全部小写(lowercase) */
    NSLog(@"%@", str.lowercaseString);
    
    /** 字符串首字母大写(capitalized) */
    NSLog(@"%@", str.capitalizedString);
    

    
    /** 是否以指定字符串为前缀(prefix) */
    NSString *str = @"www.baidu.com";
    
    if ([str hasPrefix:@"www"]) {
        NSLog(@"以www开头");
    } else {
        NSLog(@"不以www开头");
    }
    
    /** 是否以指定字符串为后缀(suffix) */
    if ([str hasSuffix:@"com"]) {
        NSLog(@"有效URL");
    } else {
        NSLog(@"无效URL");
    }

    /** 字面量 */
    
#endif
    /** 练习: http://www.lanou3g.com/icon.png 判断上述字符串中是否以“png”结尾，如果是就替换成“jpg”，如果不是，就拼接”.jpg”。*/
    
    NSString *str = @"http://www.lanou3g.com/icon.png";
    
    if ([str hasSuffix:@"png"]) {
        
        NSRange range = [str rangeOfString:@"png"];
        
        str = [str stringByReplacingCharactersInRange:range withString:@"jpg"];
        
    } else {
    
        str = [str stringByAppendingString:@".jpg"];
    }
    
    
    
    
}

/** 知识点: NSMutableString. */
void chapterOfNSMutableString() {
  
    /**
     * NSMutableString: 创建以后内容还可以修改, 可以进行增, 删, 改等操作.
     * 是NSString的子类
     * 注: 涉及到可变的类, 关键字是mutable.
     */
    
#if 0
    /** 初始化方法(init) */
    NSMutableString *mStr = [[NSMutableString alloc] initWithCapacity:100];
    
    /** 便利构造器(string) */
    NSMutableString *mstr2 = [NSMutableString stringWithCapacity:100];
    

    
    /** 拼接字符串(append) */
    
    NSString *str = @"Tom";
    int a = 100;
    
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"name%@%d", str, a];
    
    NSString *str2 = @"male";
    [mStr appendString:str2];

    /** 插入字符串(insert) */
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"Hllo"];
    
    [mStr insertString:@"e" atIndex:1];
    NSLog(@"%@", mStr);
    
    
    /** 删除字符串(delete) */
    
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"I have an iphone"];
    
//    [mStr deleteCharactersInRange:NSMakeRange(10, 6)];
    
    [mStr deleteCharactersInRange:[mStr rangeOfString:@"iphone"]];
#endif
    
    /** 替换字符串(replace) */
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"I have a iphone"];
    
    
    [mStr replaceCharactersInRange:[mStr rangeOfString:@" a "] withString:@" an "];
    
    /** 重置字符串(set) */
    [mStr setString:@"iOS"];
    
    
    /**
     * 不可变字符串:
     * 本身不能被修改.
     * 对不可变字符串的修改操作, 都是操作字符串的副本, 得到一个新的字符串并返回.
     * 可变字符串:
     * 本身能被修改.
     * 可变字符串修改的是原字符串, 因此可变字符串的操作方法没有返回值.
     */
    
    
    /** 练习: 用NSMutableString完成下述功能：
     http://www.lanou3g.com/icon.png
     判断上述字符串中是否以“png”结尾，如果是就替换成“jpg”，如果不是，就拼接”.jpg”。
     */
   

}

/** 知识点: NSNumber. */
void chapterOfNumber() {
    
    /** 作用: 实现基本数据类型和对象类型的相互转化. */
    
    
    /** int类型转化为NSNumber类型的对象 */
    
    int a = 100;
    NSNumber *num1 = [NSNumber numberWithInt:a];
    
    NSLog(@"num1:%@", num1);
    
    
    
    
    
    /** float类型转化为NSNumber类型的对象 */
    
    float f = 3.1415;
    
    NSNumber *num2 = [NSNumber numberWithFloat:f];
    NSLog(@"num2:%@", num2);
 
    
    /** char类型转化为NSNumber类型的对象 */
    char c = 'A';
    NSNumber *num3 = [NSNumber numberWithChar:c];
    NSLog(@"num3:%@", num3);
    
    /** NSNumber类型对象转化为int类型的数据 */
    NSNumber *intNum = @12; // 字面量
    int aa = intNum.intValue;
    NSLog(@"aa:%d", aa);
    
    /** NSNumber类型对象转化为float类型的数据 */
    float f2 = num2.floatValue;
    NSLog(@"f2:%f", f2);
    
    
    /** NSNumber类型对象转化为char类型的数据 */
    char c2 = num3.charValue;
    NSLog(@"c2:%c", c2);
    
    
    /** NSNumber类型对象的比较(compare) */
    NSNumber *num11 = @10;
    NSNumber *num12 = @100;
    
    if ([num11 compare:num12] == NSOrderedAscending) {
        NSLog(@"num11 小于 num12");
    } else if ([num11 compare:num12] == NSOrderedDescending) {
        
        NSLog(@"num11 大于 num12 ");
        
    } else {
        
        NSLog(@"num11 等于 num12");
    }

    /** 字面量 */
    
}

/** 知识点: NSValue. */
void chapterOfNSValue() {
    
    /** 作用之一: 结构体和对象类型的转化. */

    
    /** NSRange类型转化为NSValue类型的对象 */
    NSRange range = NSMakeRange(1, 10);
    
    NSValue *value = [NSValue valueWithRange:range];
    
    NSLog(@"value:%@", value);
    
    /** NSValue类型转化为NSRange类型的结构体变量 */
    NSRange range2 = value.rangeValue;
    
    NSLog(@"%ld, %ld", range2.location, range2.length);
 
    
    /** 指针转化为NSValue. */
    int a = 100;
    int *p = &a;
    NSValue *value2 = [NSValue valueWithPointer:p];
    
    NSLog(@"value2:%@", value2);

    /** NSValue 转化为 指针. */
    int *p1 = value2.pointerValue;
    NSLog(@"p1:%p", p1);
    
    /** 自定义结构体转化为NSValue对象 */
    
    /** NSValue对象转化为自定义结构体 */
}

/** 限时代码. */
void limitTimeCoded() {
    
    
}

/** 阅读资料. */
void resource() {
    
    
}


#pragma mark - MAIN FUNCTION
int main(int argc, const char * argv[]) {
    
#pragma mark - 知识点1: NSString(不可变字符串)
    chapterOfNSString();
    
    
#pragma mark - 知识点2: NSMutableString(可变字符串)
    chapterOfNSMutableString();
    
    
#pragma mark - 知识点3: NSNumber(数值类)
    chapterOfNumber();
    
    
#pragma mark - 知识点4: NSValue
    chapterOfNSValue();
    
    
#pragma mark - 限时代码.
    limitTimeCoded();
    
#pragma mark - 阅读资料.
    resource();
    
    return 0;
}
